Memory devices are typically provided as internal, semiconductor, integrated circuits in computers or other electronic devices. There are many different types of memory including random-access memory (RAM), read only memory (ROM), dynamic random access memory (DRAM), synchronous dynamic random access memory (SDRAM), and flash memory.
Flash memory devices have developed into a popular source of non-volatile memory for a wide range of electronic applications. Flash memory devices typically use a one-transistor memory cell that allows for high memory densities, high reliability, and low power consumption. Changes in threshold voltage of the cells, through programming of a charge storage structure, such as floating gates or trapping layers or other physical phenomena, determine the data state of each cell. Common uses for flash memory include personal computers, personal digital assistants (PDAs), digital cameras, digital media players, digital recorders, games, appliances, vehicles, wireless devices, cellular telephones, and removable memory modules, and the uses for flash memory continue to expand.
Non-volatile memory can utilize different architectures including NOR and NAND. The architecture designation is derived from the logic used to read the devices. In NOR architecture, a logical column of memory cells is coupled in parallel with each memory cell coupled to a data line, such as those typically referred to as bit lines. In NAND architecture, a column of memory cells is coupled in series with only the first memory cell of the column coupled to a bit line.
Recognizing that errors might occur in the reading of data values from the memory device, the memory device might employ one or more types of error correction methods. Error correction schemes, commonly referred to as error correction codes (ECC), can be implemented in order to detect and/or attempt to correct these errors. ECCs comprise codes in which each data signal subjected to the ECC should conform to the specific rules of construction of the ECC. Departures from this construction of data (i.e., errors) that are not too great can generally be automatically detected and sometimes corrected.
Non-volatile memory devices (e.g., NAND memory) have typically relied on a host to provide error detection and correction (e.g., external EDAC) data to the memory device. In other words, as user data is being written to the NAND memory device from the host, the host also generates the ECC data (e.g., parity data) to be stored along with the user data.
NAND memory devices are typically organized in memory blocks that are further organized into pages of data. Each page is assigned a certain amount of extra storage capability (e.g., in a spare memory area) in order to store the ECC data as well as other relevant data such as address pointers and power-loss recovery data. The additional relevant data can be referred to generically as metadata. The spare memory area for each page can be, for example, 16 additional bytes per 512 bytes of user data storage where part of the spare area is for ECC data and the rest for metadata. However, there are no standard addresses in a page in which to store either the ECC data or the metadata. The ECC data and metadata can be stored anywhere in the page. Once a location/method for storage is selected, the host tends to consistently use this location/method throughout each page in the memory device.
Relatively new types of non-volatile memory devices rely on the memory device to perform the error detection and correction (e.g., internal EDAC). In such a memory device, the host provides the user data to be stored (along with host generated metadata) and the memory device analyzes the data and generates the ECC data to be stored with the received data.
A problem can occur if a user wants to use an internal EDAC memory in a system that conventionally used an external EDAC memory. Since there are no standard addresses for storing metadata in the page, conflicts can arise, such as where a host might attempt to store user data in a location in the page of internal EDAC memory where the internal EDAC memory stores metadata.
One way around this is to rewrite host software to change where the user data/metadata is being stored. However, this could impose a burden on the manufacturer of the host.
For the reasons stated above and for other reasons that will become apparent to those skilled in the art upon reading and understanding the present specification, there is a need in the art for data remapping and/or compacting in a memory device.